package com.qf.service;


import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.web.bind.annotation.PathVariable;

import java.util.List;
import java.util.Map;
import java.util.Set;

public interface ICacheService {

 /*  将key 保存在redis 的String类型
    value 写成Object 的原因是  消费者可能会传递对象过来 需要转换成json 存入redis 中
    expireSecond 过期时间
    */
    void save2Cache (String key,Object value, Long expireSecond);

//  从不过期的数据
    void save2Cache (String key,String value);

//   获取指定key 的值
    Object get(String key);



/*    删除指定的key
    暂时写的是可变数组, 因为我们暂时还没有确定消费者传递的时候到底是传递集合方便还是可变数据方便
    可能是多个
*/
boolean delete(String keys);


//  给指定的key 设置有效时间      expire到期
    Boolean expire(String key,Integer expireSecond);


//    自增的部长写负数的代表自减
    long incr(String key,long delta);

//从redis中获取指定key 的hash数据
    Map<Object,Object> hGetAll(String key);

//    向hash中添加一个属性数据
    void hSet(String key,String field,String value);

//  批量向redis指定key的hash中添加数据
    void HSet(String key,Map map);


//  获取指定key  指定field 得值
    String HGet(String key,String field);
//  从哈希中进行自增 或者自减
    Long hIncr(String key,String field,Long delta);

    /**
     * 通过管道进行操作
     * @param map
     * @return
     */
    List<Object> pipelineOps(Map<String, Object> map);

//      批量添加  黑名单 电话号码
    Long add2Set(String key,String...  members);

//    获取redis 黑名单中所有的数据
    Set<Object> members(String key);

//    判断数据在不在redis 的数据中
    Boolean isMember(String key,String member);

    boolean del(String key,String mobile);

    Set<Object>  filter(String key);
//  向List 右侧添加数据  原因是 我们从左侧开始取数据 并且实现顺序
    Long rPush(String key,String...values);
    List getDateFromList(String key,int start,int end);

    Boolean add2Zset(String key, String value, double score);

    Long getSizeByScore(String key, double min, double max);

    Set<ZSetOperations.TypedTuple<Object>> getDataFromZset(String key,long start,long end);
    String getByPiple(String key);
//    一次性删除多个数据
    Long lremove(String key,String...values);




}
